From b6aa1794754ee32fb2e3412528a8f6eb96596042 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=98yvind=20Kol=C3=A5s?= Date: Thu, 12 Nov 2009 19:32:39 +0000 Subject: [PATCH] Added direct code paths for RGB u8 and RGBA u8 to RaGaBaA float --- extensions/gimp-8bit.c | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/extensions/gimp-8bit.c b/extensions/gimp-8bit.c index cd6b89f..dd5e7cb 100644 --- a/extensions/gimp-8bit.c +++ b/extensions/gimp-8bit.c @@ -65,6 +65,28 @@ u8_linear_to_float_linear (unsigned char *src, return samples; } + +static INLINE long +u8_linear_to_float_linear_premul (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + { + float alpha = lut_linear[src[3]]; + d[0] = lut_linear[src[0]] * alpha; + d[1] = lut_linear[src[1]] * alpha; + d[2] = lut_linear[src[2]] * alpha; + d[3] = alpha; + src += 4; + d += 4; + } + return samples; +} + static INLINE long u8_gamma_2_2_to_float_linear (unsigned char *src, unsigned char *dst, @@ -89,6 +111,17 @@ conv_rgba8_linear_rgbaF_linear (unsigned char *src, return samples; } +static INLINE long +conv_rgba8_linear_ragabaaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + u8_linear_to_float_linear_premul (src, dst, samples); + + return samples; +} + + static INLINE long conv_rgba8_gamma_2_2_rgbaF_linear (unsigned char *src, unsigned char *dst, @@ -147,6 +180,8 @@ conv_rgb8_linear_rgbaF_linear (unsigned char *src, return samples; } +#define conv_rgb8_linear_ragabaaF_linear conv_rgb8_linear_rgbaF_linear + static INLINE long conv_rgb8_gamma_2_2_rgbaF_linear (unsigned char *src, unsigned char *dst, @@ -354,6 +389,14 @@ int init (void); int init (void) { + Babl *ragabaaF_linear = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("float"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); Babl *rgbaF_linear = babl_format_new ( babl_model ("RGBA"), babl_type ("float"), @@ -438,12 +481,14 @@ init (void) #define o(src, dst) \ babl_conversion_new (src, dst, "linear", conv_ ## src ## _ ## dst, NULL) + o (rgba8_linear, ragabaaF_linear); o (rgba8_linear, rgbaF_linear); o (rgba8_gamma_2_2, rgbaF_linear); o (rgb8_linear, rgbF_linear); o (rgb8_gamma_2_2, rgbF_linear); o (rgb8_linear, rgbaF_linear); + o (rgb8_linear, ragabaaF_linear); o (rgb8_gamma_2_2, rgbaF_linear); o (ga8_linear, gaF_linear); -- 2.30.2